9646. Сумма
степеней 2
Найдите значение суммы (11 + 22
+ 33 + ....
+ nn)
mod m.
Вход. Два натуральных числа n и m (n, m
≤ 106).
Выход. Выведите значение суммы по модулю m.
Пример
входа |
Пример
выхода |
4 100 |
88 |
степень
Вычислим указанную сумму при
помощи цикла. Значения степеней ii
вычисляем за время O(i).
Реализация алгоритма
Функция
powmod вычисляет значение xn mod m.
long long
powmod(long long x, long long n, long long m)
{
if (n ==
0) return 1;
if (n % 2
== 0) return powmod((x * x) % m, n / 2,
m);
return (x *
powmod(x, n - 1, m)) % m;
}
Основная
часть программы. Читаем входные данные.
scanf("%lld %lld", &n, &m);
Вычисляем
указанную сумму.
for (i = 1; i <= n; i++)
res = (res + powmod(i, i, m)) % m;
Выводим
ответ.
printf("%lld\n", res);